import { utils, writeFile } from "xlsx";
import dayjs from "dayjs";

export async function exportElsx(columns, data, fileName) {
  const res: string[][] = data.list.map((item: any) => {
    const arr = [];
    columns.forEach((column: any) => {
      if (column.prop) {
        // 如果字符串包含time则为时间格式
        // 考虑枚举值的问题
        // prop: "department.name", 考虑到prop是对象的情况
        // prop: "status", 考虑到prop是枚举值的情况
        // prop: "time", 考虑到prop是时间格式的情况
        if (column.prop.includes(".")) {
          const props = column.prop.split(".");
          let value = item;
          for (const prop of props) {
            value = value[prop];
          }
          arr.push(value);
        } else if (column.prop.includes("time")) {
          arr.push(item[column.prop + "_formatted"]);
        } else if (column.prop.includes("status")) {
          arr.push(item[column.prop + "_text"]);
        } else {
          arr.push(item[column.prop]);
        }
      }
    });
    return arr;
  });
  const titleList: string[] = [];
  columns.forEach((column: any) => {
    if (column.prop) {
      titleList.push(column.label);
    }
  });
  res.unshift(titleList);
  const workSheet = utils.aoa_to_sheet(res);

  // 设置标题行加粗
  const titleRange = utils.decode_range(workSheet["!ref"]);
  for (let C = titleRange.s.c; C <= titleRange.e.c; ++C) {
    const cellAddress = utils.encode_cell({ r: 0, c: C }); // 第0行，即标题行
    if (!workSheet[cellAddress]) continue;

    // 设置单元格样式，字体加粗
    workSheet[cellAddress].s = {
      font: {
        bold: true, // 设置字体加粗
        sz: 12 // 可选: 设置字体大小
      },
      alignment: {
        horizontal: "center", // 可选: 设置水平居中
        vertical: "center" // 可选: 设置垂直居中
      }
    };
  }
  const workBook = utils.book_new();
  utils.book_append_sheet(workBook, workSheet, "数据报表");
  // fileName + 日期格式 年-月-日 时-分-秒
  fileName = fileName + "-" + dayjs(new Date()).format("YYYY-MM-DD-HH-mm-ss");
  writeFile(workBook, fileName + ".xlsx");
}
